<!DOCTYPE html>
<html lang="zh">

<head>
  <meta charset="utf-8">
  <meta http-equiv="X-UA-Compatible" content="IE=edge">
  <meta name="viewport" content="width=device-width, initial-scale=1">
  <title>
    
    指针变量的定义及基本使用方法 - DSRBLOG
    
  </title>
  

  
  
  <link href="atom.xml" rel="alternate" title="DSRBLOG" type="application/atom+xml">
  <link rel="stylesheet" href="asset/css/style.min.css">
  <link rel="stylesheet" href="asset/css/doc.css">
  <script src="asset/app.js"></script>


</head>

<body> <section class="ct-body">
	<div class="container">
		<div class="columns is-variable bd-klmn-columns is-4 is-centered">
			<div class="column is-four-fifths">
				<div class="post-body single-content">
					
					<h1 class="title">
						指针变量的定义及基本使用方法
					</h1>


					<div class="media">
						
						
						<div class="media-content">
							<div class="content">
								<p>
									<span class="date">2022/01/19 21:16 下午</span>
									

									

									<br />
									<span class="tran-tags">Tags:</span>&nbsp;
									
									<a class="tag is-link is-light">#C语言</a>
									

								</p>
							</div>
						</div>

					</div>
				</div>
				<article class="markdown-body single-content">
					<h2><a id="%E5%9C%B0%E5%9D%80%E5%92%8C%E6%8C%87%E9%92%88%E7%9A%84%E6%A6%82%E5%BF%B5" class="anchor" aria-hidden="true"><span class="octicon octicon-link"></span></a>地址和指针的概念</h2>
<h3><a id="%E5%9C%B0%E5%9D%80" class="anchor" aria-hidden="true"><span class="octicon octicon-link"></span></a>地址</h3>
<ul>
<li>内存区的每一个字节都有一个编号，这就是<em>地址</em> ，如果在程序内定义了一个变量，在对程序进行编译时，系统就会给这个变量分配内存单元。</li>
<li>变量的<em>地址</em>是分配给该变量的存储单元中第一个字节的<em>地址</em></li>
</ul>
<h3><a id="%E6%8C%87%E9%92%88" class="anchor" aria-hidden="true"><span class="octicon octicon-link"></span></a>指针</h3>
<ul>
<li>一个变量的地址称为该变量的<em>指针</em>。指针是一种特殊的变量，它是存放地址的。</li>
<li><strong>指针就是地址</strong></li>
<li>指针变量就是存放地址的变量</li>
</ul>
<h2><a id="%E6%8C%87%E9%92%88%E5%8F%98%E9%87%8F%E7%9A%84%E5%AE%9A%E4%B9%89%E6%96%B9%E6%B3%95" class="anchor" aria-hidden="true"><span class="octicon octicon-link"></span></a>指针变量的定义方法</h2>
<h3><a id="%E5%AE%9A%E4%B9%89%E6%8C%87%E9%92%88%E5%8F%98%E9%87%8F%E7%9A%84%E4%B8%80%E8%88%AC%E5%BD%A2%E5%BC%8F" class="anchor" aria-hidden="true"><span class="octicon octicon-link"></span></a>定义指针变量的一般形式</h3>
<pre class="line-numbers"><code class="language-c">int *a;
基类型 *指针变量名;
</code></pre>
<ul>
<li><code>*</code>是指针运算符（间接运算符），通过<code>a</code>访问其指向的单元格</li>
<li><code>int *a,</code>定义了一个变量，读作<code>a</code>，<code>a</code>称之为<em>指针变量</em></li>
<li>指针变量仅能存放地址（指针），且不能将任何与<em>基类型</em>不一致的值赋给指针变量</li>
</ul>
<h4><a id="%E4%BE%8B" class="anchor" aria-hidden="true"><span class="octicon octicon-link"></span></a>例</h4>
<pre class="line-numbers"><code class="language-c">#include &lt;stdio.h&gt;

int main()
{
    int a, b;//定义两个int类型变量
    int *pa, *pb;//定义两个指针变量，基类型为int
    a = 100, b = 10;
    pa = &amp;a, pb = &amp;b;//将a、b的地址复制给指针变量pa、pb

    //输出整型变量a、b的值
    printf(&quot;a = %d,b = %d \n&quot;, a, b);

    //输出指针变量所指向的整型变量的值
    printf(&quot;*pa = %d, *pb = %d \n&quot;, *pa, *pb);

    //输出整型变量a、b的地址
    printf(&quot;&amp;a = %d, &amp;b = %d \n&quot;, &amp;a, &amp;b);

    //输出指针变量存储的值（a、b的地址）
    printf(&quot;pa = %d, pb = %d \n&quot;, pa, pb);

    //输出指针变量pa、pb的地址
    printf(&quot;&amp;pa = %d, &amp;pb = %d \n&quot;, &amp;pa, &amp;pb);
    
    return 0;
}
</code></pre>
<ul>
<li>指针变量前面的<code>*</code>表示该变量的类型为指针型变量，如：<code>float *pointer_1</code>的指针变量名是<code>pointer_1</code>，而不是<code>*pointer_1</code></li>
<li>在定义指针变量时必须指定基类型</li>
</ul>
<h2><a id="%E6%8C%87%E9%92%88%E5%8F%98%E9%87%8F%E7%9A%84%E5%88%9D%E5%A7%8B%E5%8C%96%E4%B8%8E%E8%B5%8B%E5%80%BC" class="anchor" aria-hidden="true"><span class="octicon octicon-link"></span></a>指针变量的初始化与赋值</h2>
<h3><a id="%E5%9C%A8%E5%AE%9A%E4%B9%89%E6%8C%87%E9%92%88%E5%8F%98%E9%87%8F%E7%9A%84%E5%90%8C%E6%97%B6%E5%AE%8C%E6%88%90%E5%88%9D%E5%A7%8B%E5%8C%96" class="anchor" aria-hidden="true"><span class="octicon octicon-link"></span></a>在定义指针变量的同时完成初始化</h3>
<pre class="line-numbers"><code class="language-c">int *pa = &amp;a; //&amp;号为取地址，&amp;a代表变量a的地址
</code></pre>
<ul>
<li>变量<code>pa</code>中存放<code>a</code>在内存中的地址， <code>pa</code>是<code>a</code>的指针，<code>pa</code>指向<code>a</code></li>
</ul>
<h4><a id="%E4%BE%8B" class="anchor" aria-hidden="true"><span class="octicon octicon-link"></span></a>例</h4>
<p>输入a和b两个整数，按先大后小的顺序输出a和b，用指针方法来处理，不交换整型变量的值，而是交换两个指针变量的值</p>
<pre class="line-numbers"><code class="language-c">#include &lt;stdio.h&gt;

int main()
{
    int a, b;               //定义整型a、b
    int *pa = &amp;a, *pb = &amp;b; //定义指针变量pa、pb，并初始化分别指向a、b

    printf(&quot;a = &quot;);
    scanf(&quot;%d&quot;, &amp;a);
    printf(&quot;b = &quot;);
    scanf(&quot;%d&quot;, &amp;b);

    if (a &lt;= b) //交换指针变量的值，按整型变量的大小排序
    {
        pa = &amp;b;
        pb = &amp;a;
    }

    printf(&quot;\n%d %d&quot;, *pa, *pb);

    return 0;
}
</code></pre>
<h4><a id="%E6%B3%A8%E6%84%8F%E4%BA%8B%E9%A1%B9" class="anchor" aria-hidden="true"><span class="octicon octicon-link"></span></a>注意事项</h4>
<ul>
<li><code>*&amp;a</code>等价于<code>*pa</code>，即等价于<code>a</code>，<code>&amp;</code>和<code>*</code>运算符优先级相等，从右至左运算，先进行<code>&amp;a</code>运算，得到<code>a</code>的地址，再进行<code>*</code>运算</li>
<li><code>(*pa)++</code>等价于<code>a++</code></li>
</ul>

				</article>
				<div class="comments-wrap">
					<div class="share-comments">
						

						

						
					</div>
				</div><!-- end comments wrap -->
			</div>
		</div><!-- end columns -->
	</div><!-- end container -->
</section>  














<script src="asset/prism.js"></script>









</body>

</html>